#include <iostream>
#include <string>
using namespace std;

struct student
{
  string name;
  int score;
};


student* example3()
{
  //这里是用一个结构体指针接住结构体数组的首地址
  //对于结构体指针，个人认为目前这种赋值方法比较方便
  student *stlist = new student[3]{{"abc", 90}, {"bac", 78}, {"ccd", 93}};
  //这里不需要释放delete [] stlist;
  return stlist;
}

int main()
{
    /**
        首先先明确一点，new和delete是c++中用于申请和释放内存的，其次new和delete要成对使用
        最后new和delete不能和malloc和free混用
        由new分配的内存块一般放在堆，由程序员释放（编译器不管），一般一个new与一个delete对应，
        一个new[]与一个delete[]对应。如果程序员没有释放掉，资源将由操作系统在程序结束后自动回收。
        new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。
    */
	int *a = new int(-1);
    cout<<*a<<endl;
	delete a;

	int *b = new int[5];
	for(int i=0; i<5; i++)
        b[i] = i;
    for(int i=0; i<5; i++)
        cout<<b[i]<<endl;
	delete [] b;

    student *st1 = example3();

    for(int i=0; i<3; i++)
      cout << st1[i].name << " " << st1[i].score << endl;
    delete [] st1;
    return 0;
}
/**
output:
-1
0
1
2
3
4
abc 90
bac 78
ccd 93
*/